Angular Interview Questions for Experienced

Top 50 Angular Interview Questions for Experienced Professionals

Angular Interview Questions for Experienced developers focus on advanced framework concepts, enterprise application architecture, and technical mentorship skills that senior professionals must demonstrate. Moving into experienced Angular positions means you need to show deep knowledge of complex component interactions and effective team guidance abilities.

This interview guide covers Angular Interview Questions for Experienced engineers who have built large-scale Angular applications, including advanced RxJS patterns, performance optimization strategies, testing methodologies, and project architecture decisions.

These Angular Interview Questions for Experienced specialists will help you display your framework expertise, present examples of successful application development, and confirm your readiness for senior Angular development roles in enterprise environments.

You can also check our detailed guide: Top 100 Angular interview Questions and Answers PDF

Angular Interview Questions for 2 Years Experience

Que 1. How do you optimize Angular application performance?

Answer:
Use lazy loading for modules, ChangeDetectionStrategy.OnPush for components, and trackBy in *ngFor to minimize DOM updates. Leverage async pipe to manage subscriptions and enable production mode to disable development checks.

@Component({
  selector: 'app-my-component',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent {
  @Input() data: any;
}

Que 2. How do you implement lazy loading in Angular?

Answer:
Configure routes with loadChildren to lazy-load feature modules, reducing initial bundle size.

const routes: Routes = [
  { path: 'feature', loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule) }
];

Que 3. How do you handle HTTP requests in Angular using HttpClient?

Answer:
Use HttpClient in a service to make HTTP requests, handling responses with RxJS Observables and error handling with catchError.

@Injectable({ providedIn: 'root' })
export class DataService {
  constructor(private http: HttpClient) {}
  getUsers() {
    return this.http.get('https://api.example.com/users')
      .pipe(catchError(error => throwError('Failed to fetch users')));
  }
}

Que 4. What is the difference between template-driven and reactive forms?

Answer:
Template-driven forms use directives like ngModel for simple forms with less code. Reactive forms use FormGroup and FormControl for programmatic control, ideal for complex forms with dynamic validation.

// Reactive form
export class MyComponent {
  form = new FormGroup({
    name: new FormControl('', Validators.required)
  });
}
<form [formGroup]="form">
  <input formControlName="name">
</form>

Que 5. How do you create a custom directive in Angular?

Answer:
Use Angular CLI to generate a directive and implement custom behavior with ElementRef or Renderer2.

ng generate directive highlight
@Directive({ selector: '[appHighlight]' })
export class HighlightDirective {
  constructor(el: ElementRef) {
    el.nativeElement.style.backgroundColor = 'yellow';
  }
}
<div appHighlight>Highlighted</div>

Que 6. How do you implement route guards in Angular?

Answer:
Implement CanActivate or CanDeactivate for route protection, checking conditions like authentication before allowing navigation.

@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}
  canActivate(): boolean {
    if (/* authenticated */) return true;
    this.router.navigate(['/login']);
    return false;
  }
}

Que 7. How do you share data between components in Angular?

Answer:
Use services with BehaviorSubject for shared state, @Input/@Output for parent-child communication, or query parameters for route-based data sharing.

@Injectable({ providedIn: 'root' })
export class DataService {
  private data = new BehaviorSubject<string>('Initial');
  data$ = this.data.asObservable();
  updateData(value: string) {
    this.data.next(value);
  }
}

Que 8. What is the purpose of the async pipe, and how does it help?

Answer:
The async pipe subscribes to Observables or Promises, automatically updating the view and unsubscribing to prevent memory leaks.

<div>{{ data$ | async }}</div>
export class MyComponent {
  data$ = this.http.get('https://api.example.com/data');
  constructor(private http: HttpClient) {}
}

Que 9. How do you handle form validation in Angular?

Answer:
Use reactive forms with Validators for programmatic validation or template-driven forms with directives. Display errors with form controls.

export class MyComponent {
  form = new FormGroup({
    email: new FormControl('', [Validators.required, Validators.email])
  });
}
<input formControlName="email">
<div *ngIf="form.get('email')?.hasError('email')">Invalid email</div>

Que 10. How do you implement Angular routing with parameters?

Answer:
Define routes with parameters in the routing module and access them using ActivatedRoute.

const routes: Routes = [
  { path: 'user/:id', component: UserComponent }
];
export class UserComponent {
  constructor(private route: ActivatedRoute) {
    this.route.params.subscribe(params => console.log(params['id']));
  }
}

Angular Interview Questions for 3 Years Experience

Que 11. How do you use RxJS operators in Angular?

Answer:
Use operators like map, filter, or switchMap to transform and manage Observable streams, commonly in HTTP requests or event handling.

export class MyComponent {
  constructor(private http: HttpClient) {
    this.http.get('https://api.example.com/users')
      .pipe(map(users => users.filter(u => u.active)))
      .subscribe(data => console.log(data));
  }
}

Que 12. How do you create a custom pipe in Angular?

Answer:
Generate a pipe with Angular CLI and implement PipeTransform to transform data in templates.

ng generate pipe uppercase
@Pipe({ name: 'uppercase' })
export class UppercasePipe implements PipeTransform {
  transform(value: string): string {
    return value.toUpperCase();
  }
}
<p>{{ 'hello' | uppercase }}</p> <!-- Outputs: HELLO -->

Que 13. How do you handle errors in Angular applications?

Answer:
Use catchError for HTTP errors, implement a global error handler with ErrorHandler, and display user-friendly messages.

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
  handleError(error: any) {
    console.error('Global error:', error);
  }
}
@NgModule({
  providers: [{ provide: ErrorHandler, useClass: GlobalErrorHandler }]
})
export class AppModule {}

Que 14. How do you use Angular’s ViewChild to interact with child components?

Answer:
Use @ViewChild to access a child component or DOM element, calling its methods or manipulating its properties.

@Component({
  template: '<app-child #child></app-child>'
})
export class ParentComponent {
  @ViewChild('child') child: ChildComponent;
  ngAfterViewInit() {
    this.child.someMethod();
  }
}

Que 15. How do you implement unit testing for Angular services?

Answer:
Use Jasmine and TestBed to test services, mocking dependencies with TestBed.configureTestingModule.

describe('DataService', () => {
  let service: DataService;
  beforeEach(() => {
    TestBed.configureTestingModule({ providers: [DataService] });
    service = TestBed.inject(DataService);
  });
  it('should fetch data', () => {
    expect(service.getData()).toEqual(['Item 1', 'Item 2']);
  });
});

Que 16. What is the purpose of NgZone in Angular?

Answer:
NgZone manages change detection by running code inside or outside Angular’s zone, optimizing performance for tasks like third-party libraries that don’t need change detection.

export class MyComponent {
  constructor(private ngZone: NgZone) {
    this.ngZone.runOutsideAngular(() => {
      // Run without triggering change detection
    });
  }
}

Que 17. How do you create a responsive layout in Angular?

Answer:
Use CSS Flexbox or Grid in component styles, leverage Angular Material components, or use libraries like Bootstrap. Bind classes dynamically with ngClass.

<div [ngClass]="{'flex-column': isMobile, 'flex-row': !isMobile}">
  <div>Item 1</div>
  <div>Item 2</div>
</div>
export class MyComponent {
  isMobile = window.innerWidth < 600;
}

Que 18. How do you implement authentication with JWT in Angular?

Answer:
Store JWT in localStorage or cookies, use an HttpInterceptor to add tokens to requests, and protect routes with AuthGuard.

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const token = localStorage.getItem('token');
    const authReq = token ? req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : req;
    return next.handle(authReq);
  }
}

Que 19. How do you use Angular’s async pipe with error handling?

Answer:
Combine async pipe with *ngIf to handle loading and error states for Observables, displaying fallback UI when needed.

<div *ngIf="data$ | async as data; else loading">Data: {{ data }}</div>
<ng-template #loading>Loading...</ng-template>
export class MyComponent {
  data$ = this.service.getData().pipe(catchError(() => of(null)));
  constructor(private service: DataService) {}
}

Que 20. How do you integrate third-party libraries in Angular?

Answer:
Install the library via npm, import it in components or services, and declare types if needed. Use NgZone to manage change detection for non-Angular libraries.

import * as moment from 'moment';

export class MyComponent {
  constructor(private ngZone: NgZone) {
    this.ngZone.runOutsideAngular(() => {
      console.log(moment().format());
    });
  }
}
Angular Interview Questions

Also Check: Angular Interview Questions for Freshers

Angular Interview Questions for 5 Years Experience

Que 21. How do you optimize Angular application performance for large-scale applications?

Answer:
Implement lazy loading for modules, use ChangeDetectionStrategy.OnPush, and leverage trackBy in *ngFor. Minimize bundle size with tree-shaking via Angular CLI, use async pipe to manage subscriptions, and enable production mode. Profile with Chrome DevTools and use Angular’s ngZone to avoid unnecessary change detection.

@Component({
  selector: 'app-my-component',
  changeDetection: ChangeDetectionStrategy.OnPush,
  template: `<div *ngFor="let item of items; trackBy: trackById">{{ item.name }}</div>`
})
export class MyComponent {
  items = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }];
  trackById(index: number, item: any) { return item.id; }
}

Que 22. How do you implement server-side rendering (SSR) with Angular Universal?

Answer:
Use Angular Universal to pre-render pages on the server for SEO and faster initial loads. Add @angular/platform-server, configure server.ts, and build with ng run build:ssr. Handle client-side hydration and ensure API compatibility.

// server.ts
import { enableProdMode } from '@angular/core';
import { renderModule } from '@angular/platform-server';
import { AppServerModule } from './src/main.server';

enableProdMode();
renderModule(AppServerModule, { document: '<app-root></app-root>' });

Que 23. How do you manage state in an Angular application using NgRx?

Answer:
Use NgRx for predictable state management with actions, reducers, selectors, and effects. Define a store, dispatch actions, and select state for reactive updates, ensuring scalability with feature modules.

// actions
export const loadData = createAction('[Data] Load');
export const dataLoaded = createAction('[Data] Loaded', props<{ data: any }>());

// reducer
export const reducer = createReducer(
  initialState,
  on(dataLoaded, (state, { data }) => ({ ...state, data }))
);

// selector
export const selectData = createSelector(state => state.data, data => data);

Que 24. How do you implement a custom HTTP interceptor for authentication?

Answer:
Create an HttpInterceptor to add JWT tokens to requests, handle errors, or retry failed requests. Register it in the app module’s providers.

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const token = localStorage.getItem('token');
    const authReq = token ? req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : req;
    return next.handle(authReq).pipe(catchError(error => throwError('Request failed')));
  }
}
@NgModule({
  providers: [{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }]
})
export class AppModule {}

Que 25. How do you handle real-time data updates in Angular with WebSockets?

Answer:
Use WebSocket or libraries like ngx-socket-io to connect to a WebSocket server, subscribing to messages for real-time UI updates. Combine with RxJS for reactive data handling.

import { webSocket } from 'rxjs/webSocket';

export class MyComponent {
  subject = webSocket('ws://api.example.com');
  constructor() {
    this.subject.subscribe(msg => console.log('Message:', msg));
  }
}

Que 26. How do you implement lazy-loaded feature modules with preloading?

Answer:
Configure routes with loadChildren for lazy loading and use PreloadAllModules for preloading modules in the background to improve performance.

const routes: Routes = [
  { path: 'feature', loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule) }
];
@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })]
})
export class AppRoutingModule {}

Que 27. How do you secure an Angular application against XSS and CSRF?

Answer:
Sanitize inputs with Angular’s built-in security (e.g., DOMSanitizer for dynamic content) to prevent XSS. For CSRF, include tokens in requests via HttpInterceptor and validate on the backend.

import { DomSanitizer } from '@angular/platform-browser';

export class MyComponent {
  constructor(private sanitizer: DomSanitizer) {}
  safeHtml(html: string) {
    return this.sanitizer.bypassSecurityTrustHtml(html);
  }
}

Que 28. How do you implement dynamic forms in Angular with FormArray?

Answer:
Use FormArray in reactive forms to manage dynamic controls, adding or removing inputs programmatically.

export class MyComponent {
  form = new FormGroup({
    items: new FormArray([])
  });
  addItem() {
    (this.form.get('items') as FormArray).push(new FormControl(''));
  }
}
<form [formGroup]="form">
  <div formArrayName="items">
    <input *ngFor="let control of form.get('items').controls; let i=index" [formControlName]="i">
  </div>
</form>

Que 29. How do you implement unit testing for Angular components with TestBed?

Answer:
Use Jasmine and TestBed to configure a testing module, mock dependencies, and test component behavior, inputs, and outputs.

describe('MyComponent', () => {
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(() => {
    TestBed.configureTestingModule({ declarations: [MyComponent] });
    fixture = TestBed.createComponent(MyComponent);
  });

  it('should render data', () => {
    fixture.componentInstance.data = 'Test';
    fixture.detectChanges();
    expect(fixture.nativeElement.querySelector('p').textContent).toContain('Test');
  });
});

Que 30. How do you handle internationalization (i18n) in Angular?

Answer:
Mark translatable text with i18n attributes, extract translations with ng xi18n, and build locale-specific bundles. Serve with ng serve --configuration.

<h1 i18n="@@welcome">Welcome</h1>
ng xi18n --output-path src/locale
ng build --configuration=fr

Angular Interview Questions for 7 Years Experience

Que 31. How do you implement a custom validator for reactive forms?

Answer:
Create a validator function that returns errors based on control values, applying it to FormControl or FormGroup.

function minLengthValidator(minLength: number) {
  return (control: AbstractControl): ValidationErrors | null => {
    return control.value.length < minLength ? { minLength: true } : null;
  };
}

export class MyComponent {
  form = new FormGroup({
    name: new FormControl('', minLengthValidator(5))
  });
}

Que 32. How do you optimize Angular apps for SEO with Angular Universal?

Answer:
Use Angular Universal for server-side rendering, add meta tags with @angular/platform-browser, and ensure routes are crawlable. Use prerendering for static pages.

import { Meta, Title } from '@angular/platform-browser';

export class MyComponent {
  constructor(private meta: Meta, private title: Title) {
    this.title.setTitle('My App');
    this.meta.addTag({ name: 'description', content: 'App description' });
  }
}

Que 33. How do you implement dynamic components in Angular?

Answer:
Use ViewContainerRef and ComponentFactoryResolver to create components dynamically at runtime.

@Component({
  template: '<ng-container #container></ng-container>'
})
export class DynamicComponent {
  @ViewChild('container', { read: ViewContainerRef }) container: ViewContainerRef;
  constructor(private resolver: ComponentFactoryResolver) {}
  createComponent() {
    const factory = this.resolver.resolveComponentFactory(MyDynamicComponent);
    this.container.createComponent(factory);
  }
}

Que 34. How do you handle complex RxJS streams in Angular?

Answer:
Use operators like switchMap, combineLatest, and debounceTime to manage complex asynchronous operations, combining or transforming streams as needed.

export class MyComponent {
  constructor(private http: HttpClient) {
    this.search.pipe(
      debounceTime(300),
      switchMap(term => this.http.get(`/api/search?q=${term}`))
    ).subscribe(results => console.log(results));
  }
}

Que 35. How do you implement a global error handler in Angular?

Answer:
Extend ErrorHandler to capture and log errors globally, registering it in the app module.

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
  handleError(error: any) {
    console.error('Global error:', error);
    // Log to service or display toast
  }
}
@NgModule({
  providers: [{ provide: ErrorHandler, useClass: GlobalErrorHandler }]
})
export class AppModule {}

Que 36. How do you integrate Angular with a GraphQL backend?

Answer:
Use Apollo Angular to manage GraphQL queries and mutations, leveraging its cache for efficient data fetching.

import { Apollo, gql } from 'apollo-angular';

export class MyComponent {
  constructor(private apollo: Apollo) {
    this.apollo.query({ query: gql`{ users { name } }` })
      .subscribe(({ data }) => console.log(data));
  }
}

Que 37. How do you implement Angular animations for UI transitions?

Answer:
Use @angular/animations to define states and transitions, applying them with triggers in the component.

import { trigger, state, style, transition, animate } from '@angular/animations';

@Component({
  selector: 'app-my-component',
  animations: [
    trigger('slide', [
      state('in', style({ transform: 'translateX(0)' })),
      state('out', style({ transform: 'translateX(-100%)' })),
      transition('in <=> out', animate('300ms'))
    ])
  ],
  template: '<div [@slide]="state">Content</div>'
})
export class MyComponent {
  state = 'in';
}

Que 38. How do you handle cross-module communication in Angular?

Answer:
Use shared services with BehaviorSubject or ReplaySubject for data sharing, or leverage NgRx for centralized state management across modules.

@Injectable({ providedIn: 'root' })
export class SharedService {
  private data = new BehaviorSubject<string>('Initial');
  data$ = this.data.asObservable();
  updateData(value: string) {
    this.data.next(value);
  }
}

Que 39. How do you implement a custom theme in Angular with Angular Material?

Answer:
Define a custom theme in SCSS, import Angular Material’s theming, and apply it to components. Use @angular/material/theming for dynamic theming.

// custom-theme.scss
@import '@angular/material/theming';
$primary: mat-palette($mat-indigo);
$accent: mat-palette($mat-pink);
$theme: mat-light-theme($primary, $accent);
@include angular-material-theme($theme);

Que 40. How do you ensure accessibility (a11y) in an Angular application?

Answer:
Use semantic HTML, add ARIA attributes, and test with tools like Lighthouse or axe. Leverage Angular Material components for built-in accessibility and ensure keyboard navigability.

<button aria-label="Toggle menu">Menu</button>

Angular Interview Questions for 10 Years Experience

Que 41. How do you implement a micro-frontend architecture with Angular?

Answer:
Use Module Federation with Webpack 5 to split an Angular app into micro-frontends. Create separate modules for different teams or features, sharing dependencies dynamically. Configure webpack.config.js for remote modules and integrate with Angular CLI.

// webpack.config.js
module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      remotes: { app1: 'app1@http://localhost:3001/remoteEntry.js' },
      shared: { '@angular/core': { singleton: true } }
    })
  ]
};

Que 42. How do you handle complex state management with NgRx in a large Angular app?

Answer:
Use NgRx with feature modules, defining actions, reducers, and effects for modular state. Leverage selectors for efficient state access and meta-reducers for debugging. Persist state with ngrx-store-localstorage for offline support.

// feature.actions.ts
export const loadFeature = createAction('[Feature] Load');
export const featureLoaded = createAction('[Feature] Loaded', props<{ data: any }>());

// feature.effects.ts
@Injectable()
export class FeatureEffects {
  load$ = createEffect(() => this.actions$.pipe(
    ofType(loadFeature),
    switchMap(() => this.service.getData().pipe(
      map(data => featureLoaded({ data }))
    ))
  ));
  constructor(private actions$: Actions, private service: DataService) {}
}

Que 43. How do you implement server-side pagination with Angular and a REST API?

Answer:
Use HttpClient to fetch paginated data, manage page state in a service or component, and display with Angular Material’s paginator. Handle query parameters for page and size.

@Injectable({ providedIn: 'root' })
export class DataService {
  constructor(private http: HttpClient) {}
  getPaginatedData(page: number, size: number) {
    return this.http.get(`/api/data?page=${page}&size=${size}`);
  }
}
<mat-paginator [pageSize]="10" (page)="onPageChange($event)"></mat-paginator>

Que 44. How do you secure Angular routes with role-based access control?

Answer:
Implement a CanActivate guard to check user roles from a service or token payload. Redirect unauthorized users and integrate with JWT-based authentication.

@Injectable({ providedIn: 'root' })
export class RoleGuard implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}
  canActivate(route: ActivatedRouteSnapshot): boolean {
    const requiredRole = route.data['role'];
    if (this.authService.hasRole(requiredRole)) return true;
    this.router.navigate(['/unauthorized']);
    return false;
  }
}
const routes: Routes = [
  { path: 'admin', component: AdminComponent, canActivate: [RoleGuard], data: { role: 'admin' } }
];

Que 45. How do you integrate Angular with a GraphQL backend using Apollo?

Answer:
Use Apollo Angular to define queries and mutations, cache responses with normalized caching, and integrate with NgRx or ViewModel for reactive UI updates.

import { Apollo, gql } from 'apollo-angular';

@Injectable({ providedIn: 'root' })
export class DataService {
  constructor(private apollo: Apollo) {}
  getUsers() {
    return this.apollo.query({
      query: gql`query { users { id name } }`
    }).pipe(map(result => result.data['users']));
  }
}

Que 46. How do you implement a custom change detection strategy in Angular?

Answer:
Use ChangeDetectionStrategy.OnPush and manually trigger detection with ChangeDetectorRef. Optimize by detaching and reattaching change detection for specific components.

@Component({
  selector: 'app-my-component',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent {
  constructor(private cdr: ChangeDetectorRef) {}
  updateData() {
    // Update data
    this.cdr.markForCheck(); // Trigger change detection
  }
}

Que 47. How do you handle WebSocket-based real-time updates in Angular?

Answer:
Use rxjs/webSocket or ngx-socket-io to connect to a WebSocket server. Subscribe to messages in a service and update the UI reactively with BehaviorSubject or NgRx.

import { webSocket } from 'rxjs/webSocket';

@Injectable({ providedIn: 'root' })
export class WebSocketService {
  subject = webSocket('ws://api.example.com');
  messages$ = this.subject.asObservable();
}
export class MyComponent {
  constructor(private wsService: WebSocketService) {
    this.wsService.messages$.subscribe(msg => console.log(msg));
  }
}

Que 48. How do you implement dynamic theming in Angular with Angular Material?

Answer:
Define multiple themes in SCSS, toggle them dynamically with OverlayContainer, and store user preferences in localStorage.

// themes.scss
@import '@angular/material/theming';
$light-theme: mat-light-theme($primary, $accent);
$dark-theme: mat-dark-theme($primary, $accent);
.light-theme { @include angular-material-theme($light-theme); }
.dark-theme { @include angular-material-theme($dark-theme); }
export class ThemeService {
  constructor(private overlay: OverlayContainer) {}
  toggleTheme(isDark: boolean) {
    const theme = isDark ? 'dark-theme' : 'light-theme';
    this.overlay.getContainerElement().className = theme;
  }
}

Que 49. How do you implement end-to-end testing in Angular with Cypress?

Answer:
Use Cypress to test user flows, simulating interactions and verifying UI states. Configure Cypress to run against the Angular app and integrate with CI/CD pipelines.

// cypress/e2e/app.cy.js
describe('App', () => {
  it('navigates to home', () => {
    cy.visit('/');
    cy.get('h1').should('contain', 'Welcome');
  });
});

Que 50. How do you ensure Angular app compatibility with older browsers?

Answer:
Use Angular’s differential loading to serve modern ES modules to newer browsers and legacy bundles to older ones. Configure browserslist and polyfills in polyfills.ts.

// polyfills.ts
import 'core-js/stable';
import 'zone.js';
// browserslist
> 0.5%
last 2 versions
not dead

Conclusion

The Angular development field keeps changing with standalone components, signals implementation, and modern build tools becoming essential skills for experienced professionals. These Angular Interview Questions for Experienced developers give you the solid preparation needed for your career advancement, from advanced directive usage to enterprise-level application design. With careful study of these Angular Interview Questions for Experienced and understanding of current Angular best practices, you will be ready to secure senior Angular development positions successfully.

Similar Interview Guides:

Java interview QuestionsReact JS Interview Questions
NodeJS Interview QuestionsExpressJS Interview Questions

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *